#pragma once

#include <QCalendarWidget>

class QPushButton;
class QLabel;
class QCalendarWidgetEx  : public QCalendarWidget
{
    Q_OBJECT

public:
    QCalendarWidgetEx(QWidget *parent);
    ~QCalendarWidgetEx();

    void setDateTime(const QDateTime& dt);
    void setMinDateTime(const QDateTime& dt);
    void setMaxDateTime(const QDateTime& dt);
    QDateTime minDateTime();
    QDateTime maxDateTime();

Q_SIGNALS:
    void dateTimeActivated(const QDateTime& data);

protected Q_SLOTS:
    void slotBtnClicked();
    void slotCalendarClicked(const QDate& date);
    void slotCalendarActivated(const QDate& date);

protected:
    void paintCell(QPainter *painter, const QRect &rect, const QDate &date) const override;

private:
    void initControl();
    void initTopWidget();
    void initBottomWidget();
    void updateDateTime();
    void showYearPop();
    void showMonthPop();
    void showHourPop();
    void showMinutePop();

private:
    QDateTime _showDateTime;
    QDateTime _minDateTime;
    QDateTime _maxDateTime;

    QPushButton* _yearBtn = nullptr;
    QPushButton* _monthBtn = nullptr;
    QPushButton* _dayBtn = nullptr;
    QPushButton* _hourBtn = nullptr;
    QPushButton* _minBtn = nullptr;

    QPushButton* _ensureBtn = nullptr;
};
